Skip to content

fix(release): qualify 2.3.0 original-context and Turn boundaries - #8356

Open
loopx-agent wants to merge 52 commits into
mainfrom
codex/release-2.3.0-final-qualification-20261108
Open

loopx-agent wants to merge 52 commits into
mainfrom
codex/release-2.3.0-final-qualification-20261108

Conversation

@loopx-agent

@loopx-agent loopx-agent commented Nov 8, 2026 •

Copy link
Copy Markdown
Collaborator

2.3.0 的发布验证发现了原始上下文读取、Turn 结算和会话意图边界的实际失败。本提案修复这些路径,并把既有回归测试接到当前完整 Host 协议,以便对同一候选提交完成发布资格验证。

当前审查提交:2941018e47588bddff5613335f26dc317282c93c。

  • 保留完整原始 Turn、上下文对象及结算绑定,覆盖根对象选择、精确数值、未知字段、长文本和重放;沿现有 reader owner 收拢读取逻辑。
  • 原生首屏同时交付当前任务操作及其已有后续命令,保留精确结算去重、分页和显式选择的原有语义。真实模型可以从首屏进入获准的操作,再回到同一 Turn。
  • 澄清会话中内容已给出的报告、已有工作跟进和含糊新请求的处理,保留关闭状态、未合并状态及不可用证据。公开评测样例显式携带报告正文。
  • 原有 Stop、背压、大型 Unicode 输入、偏好损坏、跨 Goal/Agent 隔离及原始身份重放断言使用当前生产入口;兼容 codec 的既有测试继续覆盖其受支持的旧表面。
  • 更新中英文 2.3.0 说明、可选能力的启用与回退指引,以及有来源的社区贡献归属。

验证状态:

  • 作者阶段相关 Python 回归 135 项、TypeScript 原生上下文检查 26 项通过;两次未改变场景或预算的真实 Doubao Pro 操作诊断均通过,每次使用 4 次工具调用。这些诊断不代替完整发布组合验证。
  • 当前提交的仓库规定 Ruff 范围、17 个内核模块 mypy、Todo adapter mypy、RFC 双语差分门均通过。
  • 当前提交的公开边界扫描完成,0 errors、96 warnings;警告仍需逐项对照归因。
  • 全量 pytest、完整 public smoke、完整实际模型组合、安装升级和打包页面资格正在完成。旧提交的结果不计入当前提交,也未将本提案标记为已发布。

需要独立审查的取舍:chat_agent.py 增加两句必要的行为指导,共 2 行、560 bytes;本提案仅将该模块的已评审行数上限从 2043 调整到 2045,其余预算不变。请判断信息价值与维护代价,保留原失败记录。benchmark toolkit README 的风险门人工检查也仍需给出独立结论。

完整资格、当前提交的独立审查、未解决讨论清零及合并就绪检查共同决定合并与发布;PR 的准备完成状态不代表发布门已通过。

…overy

Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>
Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>
Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>
Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>
Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>
Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>
Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>
Keep main's stateless first-read, capture-bound claim recovery, and settlement presentation. Validate the complete source before using the shared projection and preserve its original reader.

Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>
Declare the adapter's supported wire version before a new invocation. Use the shared complete request renderer and result fields for TraeX. Keep v0 journal recovery and the original capture identity in the process interruption tests.

Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>
Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>
…r-20261107

Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>

# Conflicts:
#	loopx/capabilities/native_chat/steward_turn.py
#	loopx/cli_commands/quota_capture.py
#	loopx/cli_commands/turn.py
#	loopx/control_plane/quota/turn_envelope.py
#	loopx/control_plane/quota/turn_envelope.ts
#	loopx/control_plane/turn_driver/decision_capture.py
Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>
Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>
Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>
Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>
Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>
Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>

# Conflicts:
#	skills/loopx-self-repair/references/repair-patterns.md
Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>
Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>
Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>
Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>
…reads

Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>
Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>
Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>
Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>
Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>
…d-20261108

Resume verified conversation history after transport interruptions
…e-20261107

Merge the reviewed complete-source Turn prerequisite and its downstream consumer/recovery repairs.

Exact reviewed head: 5bd42ed
Review: #8211 (review)

Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>
Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>
Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>
…0261108

perf(chat): avoid off-page result reads during legacy history fallback
…budget

Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>
Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>
…ng owners

Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>
… guidance

Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>
…ity attribution

Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>
Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>
@loopx-agent
loopx-agent requested a review from maxliux5 as a code owner November 8, 2026 09:36
Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>
@loopx-agent loopx-agent changed the title Qualify bounded recovery in the 2.3.0 model behavior gates Qualify 2.3.0 recovery and native context paths Nov 8, 2026
…261108-082941

fix(workspace): show complete original Task evidence and notes
Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>
…rrative-reuse-20261108

Reuse already-read Goal narrative in progressive first reads
…n main

Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>

@loopx-agent loopx-agent left a comment

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reviewer: model_agent, gpt-6.1-sol, OpenAI, runtime_reported, reasoning_effort=max

Approval conclusion (author-owned PR; GitHub blocks formal self-approval)

动机 / Motivation

需要在原 Turn 内修正草稿、读取完整上下文并完成原结算的 Agent,以及核对发布候选证据的维护者。旧 qualification Host 把尚未创建的工作区内草稿直接当作越界,并在只影响草稿的 shell 失败后终止,无法按真实 CLI 错误在原预算中改正;短标量数组的地址投影还会比原文更大。这会让原本可以修正的一次输入失误变成整轮中断,或使“缩小传输”反而增加成本。当前 head 在原 10 次调用预算内完成缺失草稿和一次 shell 错误后的纠正,保留 proof/registry 不变、原身份及一次 writeback/spend;选择器返回原值和原 digest。这是一项可独立核验的恢复与资格夹具增量,不执行或批准正式 benchmark,不授予发布、安装或合并权限,也不把尚未完成的全量发布资格写成通过。完整 pytest、full-public、最终安装与发布资格仍由发布维护者完成;已报告的全量 pytest 两项失败尚无最终 trace,继续保持发布门。因此这个增量有实际可用结果,完整发布门仍单独持有。

改动思路 / Approach

保留原生 CLI、TypeScript 选择器和既有结算所有者的权威;Host 只恢复无受保护改写的草稿失败,浏览器 checkpoint 只是经当前来源重验的派生缓存,四个组合函数移动到现有 owner 后函数体保持等价。本 PR 的边界是原预算内可纠正的恢复、完整值与调用身份不丢失,以及透明的发布说明;不以夹具修正或单臂通过代替整个 2.3.0 发布验收。草稿路径先解析到工作区内,再让真实 CLI 返回缺失文件错误。非零 shell 退出只有在 scratch 以外的 fixture 完全不变时才能送回模型修正;protected proof 或 registry 被改写仍立即停止。错误修正消耗原调用数,不重新准入、不重置预算,也不自动修复错误模型结果。

地址投影只向既有 TypeScript planner 提供形状和数组长度,标量改用一字节占位;最终类型、精度、字节数和选中值仍由 digest 核验过的原文件 renderer 提供。主干中已合并的 #8355 作为前置保留:浏览器失败页沿原 cursor 继续,但在来源撤销、身份变化或非法 prefix 时丢弃 checkpoint;不把局部历史发布成完整回答,不启动新 Turn。

具体改动 / Changes

完整检查 packet base efd49352cc087cb299d5f7194cefd95a64b83e95 到本 head 的 29 文件 +897/-232;其中 8 个 history-recovery 路径属于已合并 #8355 前置,相对该集成点的独立增量是 21 文件 +733/-221。也读取了最新 main fe36f31f 对三个重叠文件的完整差异:complete-Turn 和 Goal-narrative 恢复必须在后续集成时保留;当前审查不认证尚不存在的新集成 head。

规范依据是改动前 docs/development/testing-and-quality.md(revision efd49352cc087cb299d5f7194cefd95a64b83e95)的预算与真实路径规则,以及发布说明合同。criterion bounded-recovery、original-context-values、original-settlement、release-body-contract 均 implemented;final-release-qualification 明确 deferred 给发布维护者,不能随此代码结论解除。

关键代码讲解

  • _execute_terminal_workspace 在错误后比较 scratch 外快照;只有受保护状态不变才返回限长 shell_nonzero 诊断。原 10-call 限制、proof 独立校验和结算顺序仍有效。
  • context_selection_transport 生成地址骨架;真正输出仍经 context_selection_view 读原值并验 digest,没有把占位零当作用户数据。
  • readChatSessionHistory 与其 fresh-source 调用者保存不可变 prefix 副本,仅重试失败页;pendingReads 是浏览器内存,不是来源权威或持久工作状态。
  • settle_requested_refresh 仍只在显式 settle-turn 下组合原结算。该函数及三个 reader helper 的 base/head AST(忽略 import/docstring)相同,退出、异常和已提交回执不重入语义未变。

同一 480 个混合标量输入为 2412 bytes:旧 planner 传输 2892 bytes,本 head 1452 bytes;原值、非 JS-safe 整数和索引元数据仍从原 capture 返回。辅助 monitor 的完整 writeback 在 File、SQLite 都为 8642 字符,immutable base 的 7500 上限实际失败并保留;只把此回归预算校准到 9336,保留 694 余量。head 测试对完整 Vision authoring 与原 semantic-closeout 参数逐项相等,spend/settled 的 2000 上限未改。Lark private_conversations 的 2012 行 baseline 记录的是 base/head 同一 blob 的已有开销,没有隐藏本 PR 的新增源代码增长;CLI 两个超限组合入口通过现有 owner 提取降到 995 和 978 行。

对主干的风险 / Risks

未发现本 head 的新阻断 finding。最强负例是“失败命令已经改写 proof/registry 却继续 spend”,以及“来源撤销后沿缓存 prefix 显示旧记录”。本次实际执行 4 个恢复/context/actor 模块 86 PASS,包含路径与 symlink 越界、受保护改写停止、缺失草稿后原 CLI 拒绝与同预算纠正、12k 分页耗尽原预算和 64k 完整选中内容相等。错误 reason_codes 仍只调用 provider 一次并由严格结果 validator 拒绝,不自动重试或改写答案。

5 个真实 CLI/File/SQLite/Explore/Host 模块第一轮 30 PASS / 1 FAIL / 3 ERROR,日志明确出现 ENOSPC,包括失败用例的 teardown;这些结果保留。磁盘恢复后只重跑三个受影响/未完成用例为 3 PASS,并对原 SQLite-evidence 用例追加三次固定环境检查,三次均 PASS(2.80/2.65/2.34 秒,磁盘始终约 19 GiB 可用),未删除断言。原 CLI 失败的完整原因未从截断 assertion 还原,不能凭后续成功宣称历史失败已修复;当前变更由完整 owner 函数等价、两 provider 原身份读回与受保护状态负例交叉覆盖。

构建当前 Chat bundle 后,production HTTP/SQLite/Core smoke 的普通绑定与管家 fallback 两路均 PASS;source revocation、403、identity/digest 冲突、只读和旧服务拒绝都有检查。用相同新 fixture 挑战 immutable base,重复中断需要 0,200,0,200,400,0,200,400 八次读取;head 为 0,200,200,400,400 五次,并返回同一完整原文、无新增 Session/Turn。初次未构建 bundle 的 fixture 前置失败保留,不计产品失败或成功。

本地 premerge 6 direct / 19 selected 全部 PASS,仍有 4 manual holds;mypy 17 个目标、Ruff、包含 tsc 的 packaged build 和公开边界检查 PASS。15 个可选能力的完整双语 usage gate PASS;18 个 handle、84 个 PR 的作者/merged 状态及 v2.2.0→本 head 的 Git 归属独立核验,双语名单相等。失联的历史 #7545 不能从显示名补造 PR 元数据,保留独立归属缺口。

另读取作者执行的 actual-default Pro compact receipt:22 场景各 2 次、44 actor invocations、113 provider requests、6 contrasts,failure/skip 均为 0,source commit/tree/clean/version 与本 head 一致,且 automatic promotion=false。这是作者运行、独立读回的证据,不是 reviewer 新执行的模型实验;旧 EV 失败和第一次调用前中止仍未改名为 PASS。未查询、轮询或等待 CI,也未运行新的付费模型。

我的整体评价 / Verdict

保留原生 CLI、TypeScript 选择器和既有结算所有者的权威;Host 只恢复无受保护改写的草稿失败,浏览器 checkpoint 只是经当前来源重验的派生缓存,四个组合函数移动到现有 owner 后函数体保持等价。本 PR 的边界是原预算内可纠正的恢复、完整值与调用身份不丢失,以及透明的发布说明;不以夹具修正或单臂通过代替整个 2.3.0 发布验收。本地长程恢复得到可观测改善:可纠正的草稿错误不再丢弃已完成工作,重复断网不再从页零反复读取;用户体验也改善,已有意图和权限下无新增确认、复制或准备轮次。模型是否在真实长期任务稳定采纳这些提示仍不作一般性结论。

复用 9b1e524 提交的 packaged Chat 合成截图检查桌面尾部、不可用恢复和 390×844 窄屏;reader、history hook 及相关界面文件在该提交与 3f1cb51 间未变,原始草稿与恢复入口可读。截图不证明已安装 App、真实 IM、模型逐条采纳或长正文的完整视觉可读性;本次没有修改正文布局,完整正文由真实 HTTP 字节断言核对。新增 state/type 和 shell_nonzero 都在各自 caller 的本地派生/诊断边界,复用原有共享词汇与 typed owner,没有新增执行权限。提取组合函数是本次有边界的行为保持整理;不需把未改动的整个 Lark provider 重写作为本 PR 前提。源码增量可接受,但 完整 pytest、full-public、最终安装与发布资格仍由发布维护者完成;已报告的全量 pytest 两项失败尚无最终 trace,继续保持发布门。任何 rebase、release source 或最终 body 改动都需按新身份复核;此结论不授予合并或发布权。

English verdict: APPROVE — bounded recovery and original-context preservation are verified at this exact head; full release qualification and merge authority remain separate holds.

Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>
…ontent

Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>
Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>
Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>
Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>
Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>
Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>
@loopx-agent loopx-agent changed the title Qualify 2.3.0 recovery and native context paths Fix 2.3.0 recovery and conversation intake Nov 8, 2026
…essure-20261108

fix(chat): retain live work during transient progress storage failure
…lease-2.3.0-opening-repair-20261108

Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>
Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>
@loopx-agent loopx-agent changed the title Fix 2.3.0 recovery and conversation intake fix(release): qualify 2.3.0 original-context and Turn boundaries Nov 8, 2026

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant